#include "server.hpp"

#define HOST "127.0.0.1"
#define PORT 3306
#define USER "root"
#define PASSWORLD ""
#define DBNAME "online_gobang"

void mysql_test()
{
    MYSQL *mysql = mysql_util::mysql_create(HOST,USER,PASSWORLD,DBNAME,PORT);
    //插入一条数据
    const char *sql = "insert stu values(null,'小红',20,90,78,100);";
    bool ret = mysql_util::mysql_exec(mysql,sql);
    if(ret==false)
    {
        return;
    }
    mysql_util::mysql_destory(mysql);
}

void json_test()
{
    Json::Value root;/*定义一个Json::Value对象*/
    std::string ss;
    /*添加数据*/
    root["姓名"] = "小明";
    root["年龄"] = 18;
    //使用append接口，将多个value添加
    root["成绩"].append(98);
    root["成绩"].append(88.5);
    root["成绩"].append(75);
    json_util::serialize(root,ss);
    DLOG("%s",ss.c_str());

    Json::Value val;
    json_util::unserialize(ss,val);
    std::cout << "姓名: " << root["姓名"].asString() << std::endl;
    std::cout << "年龄: " << root["年龄"].asInt() << std::endl;
    int sz = root["成绩"].size();
    for(int i = 0;i<sz;++i)
    {
        std::cout << "成绩: " << root["成绩"][i].asFloat() << std::endl;
    }
}

void str_test()
{
    std::string str = "132,132,11,,,,15";
    std::vector<std::string> arry;
    string_util::split(str,",",arry);
    for(auto s:arry)
    {
        DLOG("%s",s.c_str());
    }
}

void file_test()
{
    std::string filename = "./makefile";
    std::string body;
    file_util::read(filename,body);
    std::cout<<body<<std::endl;
}

void db_test()
{
    user_table ut(HOST,USER,PASSWORLD,DBNAME,PORT);
    //新增用户
    //初次测试过程问题：
    /*1.在mysql执行语句中，会执行一次mysql句柄的释放，在user_table对象消耗时还会再次释放MySQL句柄，会析构两次，造成崩溃
    2.MySQL中不支持long int，需要用UInt64转换
    3.需要重新设置一下MySQL中的密码等级*/
    Json::Value user;
    user["username"] = "xiaoming";
    //user["password"] = "123123";
    ut.insert(user);

    //登录
    // bool ret = ut.login(user);
    // if(ret == false)
    // {
    //     DLOG("LOGIN FAILED");
    // }

    //获取用户信息
    //bool ret = ut.select_by_name("xiaoming",user);
    // bool ret = ut.select_by_id(1,user);
    // std::string body;
    // json_util::serialize(user,body);
    // std::cout<<body<<std::endl;

    //胜利
   // bool ret = ut.win(1);

}

void online_test()
{
    online_manager om;
    wsserver_t::connection_ptr conn;
    uint64_t uid=2;
    om.enter_game_hall(uid,conn);
    if(om.is_in_game_hall(uid))
    {
        DLOG("IN GAME HALL");
    }
    else
    {
        DLOG("NOT IN GAME HALL");
    }
    om.exit_game_hall(uid);
    if(om.is_in_game_hall(uid))
    {
        DLOG("IN GAME HALL");
    }
    else
    {
        DLOG("NOT IN GAME HALL");
    }
}


int main()
{
    gobang_server _server(HOST,USER,PASSWORLD,DBNAME,PORT);
    _server.start(8888);
    return 0;
}
